//
//  HHAccount.m
//  oschina
//
//  Created by hjl on 16/3/31.
//  Copyright © 2016年 hjl. All rights reserved.
//

#import "HHAccount.h"
#import <objc/runtime.h>

@implementation HHAccount

- (void)encodeWithCoder:(NSCoder *)enCoder{
    unsigned int count = 0;
    // 取出所有的属性
    objc_property_t *propertes =  class_copyPropertyList([self class], &count);
    
    // 遍历所有的属性
    for(int i = 0; i < count; i++){
        // 获取当前便利到的属性名称
        const char *propertyName = property_getName(propertes[i]);
        NSString *name = [NSString stringWithUTF8String:propertyName];
        // 利用KVC取出对应属性的值
        id value = [self valueForKey:name];
        // 归档到文件中
        [enCoder encodeObject:value forKey:name];
    }
}
- (instancetype)initWithCoder:(NSCoder *)decoder{
    if(self = [super init]){
        unsigned int count = 0;
        // 取出所有的属性
        objc_property_t *propertes =  class_copyPropertyList([self class], &count);
        
        // 遍历所有的属性
        for(int i = 0; i < count; i++){
            
            // 获取当前便利到的属性名称
            const char *propertyName = property_getName(propertes[i]);
            NSString *name = [NSString stringWithUTF8String:propertyName];
            // 解归档当前遍历到的属性的值
            id value = [decoder decodeObjectForKey:name];
            // 利用KVC给属性设值
            [self setValue:value forKey:name];
        }
    }
    return self;
}
@end
